Полный перебор

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Полный перебор (или метод «грубой силы», англ. brute force) — метод решения математических задач. Относится к классу методов поиска решения исчерпыванием всевозможных вариантов[англ.]. Сложность полного перебора зависит от количества всех возможных решений задачи. Если пространство решений очень велико, то полный перебор может не дать результатов в течение нескольких лет или даже столетий.

Любая задача из класса NP может быть решена полным перебором. При этом, даже если вычисление целевой функции от каждого конкретного возможного решения задачи может быть осуществлено за полиномиальное время, в зависимости от количества всех возможных решений полный перебор может потребовать экспоненциального времени работы.

В криптографии на вычислительной сложности полного перебора основывается оценка криптостойкости шифров. В частности, шифр считается криптостойким, если не существует метода «взлома» существенно более быстрого чем полный перебор всех ключей. Криптографические атаки, основанные на методе полного перебора, являются самыми универсальными, но и самыми долгими.

Метод исчерпывания

[править | править код]

Терминология

[править | править код]

В английском языке рассматриваемый в данной статье термин «brute-force» обычно относится к классу хакерских атак. При этом более общее понятие, математический метод исчерпывания всевозможных вариантов для нахождения решения задачи, соответствует термину «Proof by exhaustion».

«Метод исчерпывания» включает в себя целый класс различных методов. Обычно постановка задачи подразумевает рассмотрение конечного числа состояний данной логической системы с целью выявления истинности логического утверждения посредством независимого анализа каждого состояния[1]. Методика доказательства утверждения состоит из двух частей:

  1. Доказательство возможности исчерпания всех состояний системы. Требуется показать, что любое конкретное состояние системы (например, значение доказываемого логического выражения) соответствует хотя бы одному из рассматриваемых кандидатов в решения.
  2. Проверка каждого варианта и доказательство того, что рассматриваемый вариант является или не является решением поставленной задачи.

Характерные задачи, решаемые методом полного перебора

[править | править код]

Хотя полный перебор в большинстве прикладных задач (особенно не связанных со взломом шифров) на практике не применяется, есть ряд исключений. В частности, когда полный перебор всё же оказывается оптимальным либо представляет собой начальный этап в разработке алгоритма, его использование оправдано. Примером оптимальности полного перебора является алгоритм оценки времени вычисления цепочечных произведений матриц, который не удаётся ускорить по сравнению с алгоритмом, основанным на методе «грубой силы»[2]. Этот алгоритм используется для решения классической задачи динамического программирования — определения приоритетов вычислений матричных произведений следующего вида: .

Пример использования полного перебора

[править | править код]

Исходная задача заключается в вычислении данной цепочки (матричного произведения) за наименьшее время. Можно реализовать тривиальный последовательный алгоритм, вычисляющий искомое произведение. Поскольку матричное произведение является ассоциативной операцией, можно вычислить цепочечное произведение, произвольно выбирая пару элементов цепочки и заменяя её результирующей матрицей . Если повторять описанную процедуру раз, то оставшаяся результирующая матрица и будет ответом: . Эта формула может быть проиллюстрирована следующим образом. Рассмотрим матричную цепочку: . Существуют следующие 5 способов вычислить соответствующее этой цепочке произведение :

Выбрав правильный порядок вычислений, можно добиться значительного ускорения вычислений. Чтобы убедиться в этом, рассмотрим простой пример цепочки из 3-х матриц. Положим, что их размеры равны соответственно . Стандартный алгоритм перемножения двух матриц размерами требует время вычисления, пропорциональное числу (число вычисляемых скалярных произведений)[3]. Следовательно, вычисляя цепочку в порядке , получаем скалярных произведений для вычисления , плюс дополнительно скалярных произведений, чтобы вычислить второе матричное произведение. Общее число скалярных произведений: 7500. При ином выборе порядка вычислений получаем плюс скалярных произведений, то есть 75000 скалярных произведений[3].

Таким образом, решение данной задачи может существенно сократить временные затраты на вычисление матричной цепочки. Это решение может быть получено полным перебором: необходимо рассмотреть все возможные последовательности вычислений и выбрать из них ту, которая при вычислении цепочки занимает наименьшее число скалярных произведений. Однако надо учитывать, что этот алгоритм сам по себе требует экспоненциальное время вычисления[2], так что для длинных матричных цепочек выигрыш от вычисления цепочки самым эффективным образом (оптимальная стратегия) может быть полностью потерян временем нахождения этой стратегии[4].

Связь с концепцией «разделяй и властвуй»

[править | править код]
Алгоритм быстрой сортировки — основанный на парадигме «разделяй и властвуй».

В теории алгоритмов известны несколько широко применимых общих концепций. Метод полного перебора является одной из них. Фактически, полным перебором возможно воспользоваться в тех случаях, когда мы имеем дело с дискретной детерминированной системой, состояния которой могут быть легко проанализированы[5].

Другим ярким примером фундаментальной концепции теории алгоритмов является принцип «разделяй и властвуй». Эта концепция применима, когда система поддается разделению на множество подсистем, структура которых аналогична структуре исходной системы[6]. В таких случаях подсистемы также поддаются разделению, либо являются тривиальными[6]. Для таких систем тривиальной является исходно поставленная задача. Таким образом, реализация концепции «разделяй и властвуй» имеет рекурсивный характер.

В свою очередь, рекурсия представляет собой разновидность полного перебора. Так, рекурсия применима лишь для дискретных систем[7]. Однако это требование относится не к состояниям данной системы, а к её субструктуре[англ.]. Последовательное рассмотрение всех уровней дает исчерпывающее решение задачи, поставленной для всей дискретной системы.

По сравнению с другими примерами полного перебора, особенностью метода рекурсии является то, что конечное решение опирается не на одну-единственную тривиальную подсистему. В общем случае решение формируется на основании целого множества подсистем.

Для следующих примеров классических задач, решаемых методом «разделяй и властвуй», полный перебор является либо единственным известным методом решения, либо изначальной реализацией, которая в дальнейшем была оптимизирована:

Атака методом «грубой силы»

[править | править код]
Специализированный компьютер компании EFF для взламывания шифра DES. Имея в распоряжении 1856 микросхем, взламывал ключ DES всего за несколько суток. На фотографии видна двусторонняя плата «DES Cracker», содержащая 64 микросхемы «Deep Crack». Цена всего вычислительного комплекса — 250 000 $

В криптографии на полном переборе основывается криптографическая атака методом «грубой силы», или брутфорс[12] (англ. Brute-force attack) — взлом пароля путём перебора всех возможных вариантов ключа. Её особенностью является возможность применения против любого практически используемого шифра[13] (об исключениях, то есть безопасности с точки зрения теории информации см. также шифроблокнот и Теоретико-информационная стойкость). Однако такая возможность существует лишь теоретически, зачастую требуя нереальные временные и ресурсные затраты. Если пространство решений слишком большое, то данный вид атаки может не дать результатов в течение нескольких лет или даже веков. Наиболее оправдано использование атаки методом «грубой силы» в тех случаях, когда не удается найти слабых мест в системе шифрования, подвергаемой атаке (либо в рассматриваемой системе шифрования слабых мест не существует). При обнаружении таких недостатков разрабатываются методики криптоанализа, основанные на их особенностях, что способствует упрощению взлома.

Устойчивость к brute-force атаке определяет используемый в криптосистеме ключ шифрования. Так, с увеличением длины ключа сложность взлома этим методом возрастает экспоненциально. В простейшем случае шифр длиной в N битов взламывается, в наихудшем случае - за время, пропорциональное 2N[14][15]. Среднее время взлома в этом случае в два раза меньше и составляет 2N-1. Существуют способы повышения устойчивости шифра к «brute force», например запутывание (обфускация) шифруемых данных, что делает нетривиальным отличие зашифрованных данных от незашифрованных.

Криптографические атаки, основанные на методе «грубой силы», являются наиболее универсальными, но в то же время наиболее медленными. Используются в основном начинающими хакерами. Эффективны для несложных алгоритмов шифрования и ключей длиной до 64 бит. Для современных ключей длиной от 128 бит (иногда для ключа факторизируется большое число из 200 цифр), неэффективны. Любой пароль может быть подобран путём полного перебора. При этом, даже если вычисление целевой функции от каждого конкретного возможного решения задачи может быть осуществлено за полиномиальное время, в зависимости от количества всех возможных решений атака может потребовать экспоненциального времени работы.

Распараллеливание вычислений

[править | править код]

Для увеличения скорости подбора ключа используется распараллеливание вычислений. Существует два вида распараллеливания:

  • построение алгоритма. Пусть алгоритм можно представить в виде цепочки простейших действий (операций). Пусть  — количество процессоров, в которых запрограммирован порядок. Процессоры выполняют работу:

-ый процессор выполняет три одинаковые по времени операции:

  1. получение данных от -го процессора
  2. выполнение операции
  3. передача данных -му процессору.

Эта операция может занять всего сотую долю секунды. Тогда соединённых параллельно и синхронно работающих процессоров работают со скоростью (так как всего три операции), где  — скорость выполнения одной операции одним процессором.

  • разбивание на множества. Множество всех возможных ключей — разбивается на непересекающиеся подмножества. Система с процессорами перебирает ключи так, что, например, -ая машина осуществляет перебор ключей из подмножества . Система прекращает работу, если одна машина подобрала правильный ключ. Но если каждый процессор начнёт вычисление не с первого возможного ключа, время перебора может увеличиться, но алгоритм упростится. Среднее число подборов в этом случае составит , где  — число элементов во множестве ключей, а  — число процессоров.

Обратные атаки «грубой силой»

[править | править код]

При обратной атаке с использованием метода грубой силы один (обычно общий) пароль проверяется на несколько имён пользователей. В этом случае также применяется распараллеливание, но процессоры должны проверить, есть ли у другого пользователя такой пароль. В такой стратегии злоумышленник обычно не старается взломать аккаунт одного конкретного пользователя. Против обратных атак устанавливается политика паролей, которая запрещает использование одинаковых паролей.

Пример продолжительности подбора паролей

[править | править код]

В таблице представлено оценочное время полного перебора паролей в зависимости от их длины. Предполагается, что в пароле могут использоваться 36 различных символов (латинские буквы одного регистра + цифры), а скорость перебора составляет 100 000 паролей в секунду (класс атаки B, типичный для восстановления пароля из кэша Windows (.PWL файлов) на Pentium 100)[16].

Кол-во знаков Кол-во вариантов Стойкость Время перебора
1 36 5 бит менее секунды
2 1296 10 бит менее секунды
3 46 656 15 бит менее секунды
4 1 679 616 21 бит 17 секунд
5 60 466 176 26 бит 10 минут
6 2 176 782 336 31 бит 6 часов
7 78 364 164 096 36 бит 9 дней
8 2,821 109 9x1012 41 бит 11 месяцев
9 1,015 599 5x1014 46 бит 32 года
10 3,656 158 4x1015 52 бита 1162 года
11 1,316 217 0x1017 58 бит 41 823 года
12 4,738 381 3x1018 62 бита 1 505 615 лет

Таким образом, пароли длиной до 8 символов включительно в общем случае не являются надёжными. Для современных компьютеров этот показатель гораздо выше. Так, 64-битный ключ (пароль) перебирается на современном компьютере примерно за 2 года и перебор легко может быть распределен между множеством компьютеров.

Средства проведения атаки

[править | править код]
Nvidia Tesla C2075 обладает 448 ядрами архитектуры CUDA, 6 ГБ оперативной памяти типа GDDR5 и имеет пиковую производительность, равную 1030 Гфлопс при вычислениях с одинарной точностью.[17] Такие параметры делают эту систему подходящей для сложных вычислений, требуемых в «brute force»-атаке

Современные персональные компьютеры позволяют взламывать пароли полным перебором вариантов с эффективностью, проиллюстрированной в таблице выше. Однако, при оптимизации brute force, основанной на параллельных вычислениях, эффективность атаки можно существенно повысить[18]. При этом может потребоваться использование компьютера, адаптированного к многопоточным вычислениям. В последние годы широкое распространение получили вычислительные решения, использующие GPU, такие как Nvidia Tesla. С момента создания компанией Nvidia архитектуры CUDA в 2007 году, появилось множество решений (см., например, Cryptohaze Multiforcer, Pyrit Архивная копия от 20 ноября 2012 на Wayback Machine), позволяющих проводить ускоренный подбор ключей благодаря использованию таких технологий, как CUDA, FireStream, OpenCL.

Устойчивость к атаке полного перебора

[править | править код]

В процессе улучшения системы информационной безопасности по отношению к атаке полным перебором можно выделить два основных направления:

  1. повышение требований к ключам доступа от защищаемой информации;
  2. повышение надежности всех узлов системы безопасности.

Таким образом, невозможно достичь высокого уровня защиты, улучшая только один из этих параметров[19]. Существуют примеры того, как система аутентификации, основанная на оптимальной сложности паролей, оказывалась уязвимой для копирования базы данных на локальный компьютер злоумышленника, после чего подвергалась brute force атаке с применением локальных оптимизаций и вычислительных средств, недоступных при удаленном криптоанализе[20]. Такое положение дел привело к тому, что некоторые эксперты по компьютерной безопасности начали рекомендовать более критически относится к таким стандартным инструкциям, призванным обеспечить надежную защиту, как использование максимально длинных паролей[21]. Ниже приведен список некоторых применяемых на практике методов[22][23][24] повышения надежности криптосистемы по отношению к brute force атаке:

Методы оптимизации полного перебора

[править | править код]

Метод ветвей и границ

[править | править код]

Для ускорения перебора метод ветвей и границ использует отсев подмножеств допустимых решений, заведомо не содержащих оптимальных решений[25].

Распараллеливание вычислений

[править | править код]

Одним из методов увеличения скорости подбора ключа является распараллеливание вычислений. Существует два подхода к распараллеливанию[26]:

  • Первый подход — построение конвейера[26]. Пусть алгоритм соотношения можно представить в виде цепочки простейших действий (операций): . Возьмём процессоров , зададим их порядок и положим, что  — ый процессор выполняет три одинаковые по времени операции:
    1. приём данных от  — го процессора;
    2. выполнение операции ;
    3. передача данных следующему -му процессору.
    Тогда конвейер из последовательно соединённых, параллельно и синхронно работающих процессоров работает со скоростью , где  — скорость выполнения одной операции одним процессором.
  • Второй подход состоит в том, что множество всех возможных ключей разбивается на непересекающиеся подмножества [26]. Система из машин перебирает ключи так, что  — ая машина осуществляет перебор ключей из множества . Система прекращает работу, если одна из машин нашла ключ. Самое трудное — это разделение ключевого множества. Но если каждый процессор начнёт вычисление с какого-то произвольного ключа, то время нахождения увеличится, а схема значительно упростится. Среднее число шагов в этом случае составляет , где  — число элементов во множестве ключей, а  — число процессоров.

Радужные таблицы

[править | править код]

Предпосылки к появлению

[править | править код]

Компьютерные системы, которые используют пароли для аутентификации, должны каким-то образом определять правильность введенного пароля. Тривиальное решение данной проблемы — хранить список всех допустимых паролей для каждого пользователя, но такой подход не защищён от утечки базы данных. Простой, но неверный способ защититься от утечки базы — вычислить криптографическую хеш-функцию от пароля.

Способ неверен тем, что можно заранее провести перебор, а когда потребуется взломать пароль — посмотреть в результат. Радужная таблица представляет собой оптимизацию этого метода[27]. Основным её преимуществом является значительное уменьшение количества используемой памяти[28][27].

Использование

[править | править код]

Радужная таблица создается построением цепочек возможных паролей. Каждая цепочка начинается со случайного возможного пароля, затем подвергается действию хеш-функции и функции редукции. Данная функция преобразует результат хеш-функции в некоторый возможный пароль (например, если мы предполагаем, что пароль имеет длину 64 бита, то функцией редукции может быть взятие первых 64 бит хеша, побитовое сложение всех 64-битных блоков хеша и т. п.). Промежуточные пароли в цепочке отбрасываются и в таблицу записываются только первый и последний элементы цепочек. Создание таких таблиц требует больше времени, чем нужно для создания обычных таблиц поиска, но значительно меньше памяти (вплоть до сотен гигабайт, при объёме для обычных таблиц в N слов для радужных нужно всего порядка N2/3)[28]. При этом они требуют хоть и больше времени (по сравнению с обычными методами) на восстановление исходного пароля, но на практике более реализуемы (для построения обычной таблицы для 6-символьного пароля с байтовыми символами потребуется 2566 = 281 474 976 710 656 блоков памяти, в то время как для радужной — всего 2566·⅔ = 4 294 967 296 блоков).

Для восстановления пароля данное значение хеш-функции подвергается функции редукции и ищется в таблице. Если не было найдено совпадения, то снова применяется хеш-функция и функция редукции. Данная операция продолжается, пока не будет найдено совпадение. После нахождения совпадения цепочка, содержащая его, восстанавливается для нахождения отброшенного значения, которое и будет искомым паролем.

В итоге получается таблица, которая может с высокой вероятностью восстановить пароль за небольшое время[29].

Хотя любая защита информационной системы должна, в первую очередь, быть надежной по отношению к атаке методом «грубой силы», случаи успешного применения данной атаки злоумышленниками достаточно распространены.

Атака «Энигмы»

[править | править код]
Функционирующая восстановленная версия «бомбы» в музее Блетчли-парк. Каждый из барабанных роторов имитирует работу соответствующего ротора Энигмы. Всего используется 36 эквивалентных узлов Энигмы. В правой части средней полки находятся три идентификационных ротора. Восстановление «бомбы» стало возможным в 2008 году благодаря трудам Джона Харпера[англ.][30], а церемонию первого запуска возглавил покровитель Британского компьютерного общества[англ.] Эдвард, герцог Кентский

Изобретённая в 1918 году шифровальная машина, названная «Энигма», широко использовалось немецким военно-морским флотом начиная с 1929 года. В течение дальнейших нескольких лет система модифицировалась, а с 1930 года активно использовалась немецкой армией и правительством в процессе Второй мировой войны[31].

Первые перехваты сообщений, зашифрованных с кодом Энигмы, относятся к 1926 году. Однако прочитать сообщения долгое время не могли. На протяжении всей Второй мировой шло противостояние между польскими и германскими криптографами. Поляки, получая очередной результат по взлому немецкой криптосистемы, сталкивались с новыми трудностями, которые привносили германские инженеры, постоянно модернизирующие систему «Энигма». Летом 1939 года, когда неизбежность вторжения в Польшу стала очевидна, бюро передало результаты своей работы английской и французской разведкам[32].

Дальнейшая работа по взлому была организована в «Блетчли-парке. Основным инструментом криптоаналитиков стала дешифровальная машина Бомба». Её прототип был создан польскими математиками накануне Второй мировой войны для министерства обороны Польши. На основе этой разработки и при непосредственной поддержке её создателей в Англии был сконструирован более «продвинутый» агрегат.

Теоретическую часть работы выполнил Алан Матисон Тьюринг[33]. Его работы по криптографическому анализу алгоритма, реализованного в шифровальной машине «Энигма», основывался на более раннем криптоанализе предыдущих версий этой машины, которые были выполнены в 1938 году польским криптоаналитиком Марианом Реевским. Принцип работы разработанного Тьюрингом дешифратора состоял в переборе возможных вариантов ключа шифра и попыток расшифровки текста, если была известна структура дешифруемого сообщения или часть открытого текста[34].

С современной точки зрения шифр «Энигмы» был не очень надёжным, но только сочетание этого фактора с наличием множества перехваченных сообщений, кодовых книг, донесений разведки, результатов усилий военных и даже террористических атак позволило «вскрыть» шифр[32].

После войны Черчилль, из соображений безопасности, приказал разрушить эти машины.

Уязвимость протокола WPS

[править | править код]

В 2007 году группа компаний, входящих в организацию Wi-Fi Alliance, начали продажу беспроводного оборудования для домашних сетей с поддержкой нового стандарта Wi-Fi Protected Setup. Среди производителей беспроводных маршрутизаторов, поддерживающих данную технологию, были такие крупные компании, как Cisco/Linksys, Netgear, Belkin и D-Link. Стандарт WPS был призван существенно упростить процесс настройки беспроводной сети и её использования для людей, не обладающих широкими знаниями в области сетевой безопасности. Однако, к концу 2011 года были опубликованы сведения о серьезных уязвимостях в WPS, которые позволяли злоумышленнику подобрать PIN-код[35] беспроводной сети всего за несколько часов, обладая вычислительными ресурсами обыкновенного персонального компьютера[36].

В данный момент Координационный центр CERT не рекомендует производителям выпускать новое оборудование, поддерживающее данную технологию.[37]

Массовый взлом домашних сетей посредством WASP

[править | править код]

В 2010 году на конференции DEFCON18 был представлен беспилотный летательный аппарат WASP, предназначенный для массового сбора статистики по домашним Wi-Fi сетям. БПЛА оснащён компактным бортовым компьютером под управлением BackTrack Linux, Одной из его функций называлась возможность автоматического взлома паролей беспроводных сетей посредством brute force[38][39].

Примечания

[править | править код]
  1. Ried & Knipping, 2010, p. 133.
  2. 1 2 3 Cormen, 2001, p. 372.
  3. 1 2 Cormen, 2001, Произведение матричных цепочек, pp. 370—372.
  4. Cormen, 2001, p. 377.
  5. Cormen, 2001, Раздел 4. Метод «разделяй и властвуй», pp. 65—67.
  6. 1 2 Cormen, 2001, p. 65.
  7. Cormen, 2001, p. 66.
  8. Knuth, 1972, Избранные исследовательские задачи в комбинаторике.
  9. Cormen, 2001, Проблема LCS: нахождение наибольшей общей подпоследовательности, p. 392.
  10. Cormen, 2001, Поиск ближайшей пары точек, p. 1039.
  11. SchneierOnSecurity, Коллизии в алгоритме хеширования SHA-1.
  12. Брутфорс. Энциклопедия «Лаборатории Касперского». Дата обращения: 21 ноября 2018. Архивировано 21 ноября 2018 года.
  13. Paar, 2010, p. 7.
  14. Cormen, 2001.
  15. Knuth, 1972.
  16. www.lockdown.co.uk, Скорость восстановления паролей.
  17. Tesla, Параметры Tesla C2075 на сайте производителя.
  18. Ku, Проведение brute-force атаки посредством видеокарт Nvidia и AMD.
  19. Mark Pothier (2010-04-11). "Please Do Not Change Your Password". The Boston Globe. Архивировано 28 июня 2011. Дата обращения: 25 мая 2011. Смена пароля может быть бесполезным действием на пути к обеспечению информационной безопасности
  20. Weiss, "Сильный" пароль это относительное понятие.
  21. Cormac, 2009, Рациональный отказ от безопасности.
  22. Gil, Что такое взлом методом Brute Force?.
  23. 1 2 McGlinn, Хеширование паролей в PHP.
  24. 1 2 Zernov, Защита от bruteforce средствами iptables.
  25. Land, 1960, Автоматический метод решения задач дискретного программирования.
  26. 1 2 3 Воеводин, 2002, Параллельные вычисления.
  27. 1 2 Oechslin, 2003, p. 1.
  28. 1 2 Hellman, 1980, p. 401.
  29. Hellman, 1980, p. 405.
  30. Harper, Проект восстановления «Британской бомбы».
  31. larin-shankin, 2007, Вторая мировая война в эфире: некоторые аспекты операции «Ультра».
  32. 1 2 chernyak, 2003, Тайны проекта Ultra.
  33. Ellsbury, «Энигма» и «Бомба».
  34. groteck.ru, Машина Turing Bombe.
  35. Liebowitz1, Домашние беспроводные маршрутизаторы подвержены атаке brute-force.
  36. Ray, 2011, Недостаточная безопасность протокола WPS.
  37. CERT, Протокол WPS подвержен brute-force.
  38. Greenberg, Летающий беспилотник взламывает пароли от беспроводных сетей.
  39. Humphries, WASP: летающий беспилотник-разведчик, взламывающий сети Wi-Fi.

Литература

[править | править код]